package com.sz.biz.common.customer.service;

import com.sz.biz.common.customer.dto.CusCompanyDto;
import com.sz.biz.common.customer.entity.CusCustomer;
import com.sz.biz.common.customer.dto.CusCustomerDto;
import com.sz.biz.common.customer.dto.CusCustomerTradeDto;
import com.sz.biz.common.customer.dto.CusEnterpriseInfoDto;
import com.sz.common.base.dto.QResultDto;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * Created by xutao on 17/4/6.
 */
public interface CustomerService {

    /**
     * 新增客户基本信息
     *
     * @param entry 新增的实体
     * @return 新增是否成功
     */
    int save(CusCustomer entry);

    /**
     * 批量删除客户基本信息
     *
     * @param ids
     */
    void batchDelete(List<Integer> ids);

    /**
     * 修改客户基本信息
     *
     * @param cusCustomerList
     */
    void update(List<CusCustomer> cusCustomerList);

    /**
     * 搜索客户基本信息
     *
     * @param
     */
    QResultDto find(String q, String sortName, boolean isAsc, int pageIndex, int pageSize, String refCombos,
                    Integer isLocked, int evaluateLeval, boolean beyondLeval, boolean advancedSeach,
                    Integer userType);
    /**
     * 搜索客户基本信息,返回id， userName, code
     *
     * @param
     */
    QResultDto findShort(String q, String sortName, boolean isAsc, int pageIndex, int pageSize, Integer userType);

    /**
     * 锁定客户
     *
     * @param
     */
    void lockCustomer(List<Integer> ids);

    /**
     * 解锁客户
     *
     * @param
     */
    void unlockCustomer(List<Integer> ids);

    /**
     * 凭借customerid查账主账户信息
     */
    CusCustomerDto findById(Integer id);

    /**
     * 凭借customerid查账主账户信息
     */
    CusCustomer findSimpleById(Integer id);

    /**
     * 凭借code查账主账户信息
     */
    Boolean checkCodeExist(String code);

    /**
     * 凭借Email查账主账户信息
     */
    Boolean checkEmailExist(String email);

    /**
     * 凭借id查账主账户信息---与findById区别，返回值结构不同
     */
    CusCustomer findCustomerById(Integer id);

    List<CusCustomer> findShortByIds(List<Integer> customerIdList);
    CusCustomer findShortById(Integer customerId);

    /**
     *
     * 客户系统专用服务，生成企业账户且附带生成账号信息
     *
     */
    Map<String,Object> registerEnterpriseAccount(String userName, String code, String telNo, String password);

    /**
     *
     * 获取企业信息
     */
    CusEnterpriseInfoDto findEnterpriseInfoById(Integer id);

    void setCustomerAuthStatus(int customerId, int state);

    /**
     * 贸易获取客户信息， 返回id， username， code
     * @param customerCodes
     * @return
     */
    List<CusCustomerTradeDto> findCustomerTrade(List<String> customerCodes);

    /**
     * 查找物流对应的账户信息
     */
    QResultDto findNameCodeDtoForLogistic(String q, int pageIndex, int pageSize);

    /**
     * 查找贸易对应的账户信息
     */
    QResultDto findNameCodeDtoForTrade(String q, int pageIndex, int pageSize);

    /**
     * 商品企业限制
     * @param q
     * @param supplierCode
     * @param sortName
     * @param isAsc
     * @param pageIndex
     * @param pageSize
     * @param userType
     * @return
     */
    QResultDto findShortForGoods(String q, String supplierCode, String sortName, boolean isAsc, int pageIndex, int pageSize, Integer userType);


    int checkCustomerAuthStatus(int refCustomerId);

    CusEnterpriseInfoDto findEnterpriseInfo();

    void createPayAccount(CusCustomer cusCustomer,CusCompanyDto cusCompanyDto);

    /**
     * 查询账户ID为NULL的客户
     * @return
     */
    List<CusCustomer> findCustomers();

    /**
     * 查询创建时间内的客户数量
     * @param dateBegin
     * @param dateEnd
     * @return
     */
    List<CusCustomer> finByCreateTimeForRpt(Date dateBegin, Date dateEnd);
}
